Package de.yaams.extensions.rgssproject.database.form

Source Code of de.yaams.extensions.rgssproject.database.form.RubyForm

/**
*
*/
package de.yaams.extensions.rgssproject.database.form;

import java.util.ArrayList;

import org.jruby.RubyArray;
import org.jruby.RubyBoolean;
import org.jruby.RubyHash;
import org.jruby.RubyObject;
import org.jruby.runtime.builtin.IRubyObject;

import de.yaams.extensions.jruby.RubyHelper;
import de.yaams.extensions.rgssproject.database.JavaTable;
import de.yaams.extensions.rgssproject.database.SystemGObject;
import de.yaams.maker.helper.JavaHelper;
import de.yaams.maker.helper.gui.form.FormCheckbox;
import de.yaams.maker.helper.gui.form.FormComboBox;
import de.yaams.maker.helper.gui.form.FormElement;
import de.yaams.maker.helper.gui.form.FormElementChangeListener;
import de.yaams.maker.helper.gui.form.FormInfo;
import de.yaams.maker.helper.gui.form.FormNumberSpinner;
import de.yaams.maker.helper.gui.form.FormTextField;
import de.yaams.maker.helper.gui.form.core.FormBuilder;
import de.yaams.maker.helper.language.I18N;

/**
* @author abt
*
*/
public class RubyForm {

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormTextField getString(final String name, final String id, final RubyObject object) {
    // return (FormTextField) new FormTextField(name,
    // object.getInstanceVariable(id).asJavaString())
    // .addChangeListener(new FormElementChangeListener() {
    //
    // @Override public void stateChanged(FormElement form) {
    // object.setInstanceVariable(id,
    // RubyString.newString(object.getRuntime(),
    // form.getContentAsString()));
    //
    // }
    // });
    return getString(name, object.getInstanceVariable(id));
  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormTextField getString(final String name, final IRubyObject irb) {
    return (FormTextField) new FormTextField(name, RubyHelper.toString(irb)).addChangeListener(new FormElementChangeListener() {

      @Override
      public void stateChanged(FormElement form) {
        RubyHelper.setString(irb, form.getContentAsString());
      }
    });
  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormTextField getStringFromAry(final String name, final RubyArray ra, final int pos) {
    return (FormTextField) new FormTextField(name, (String) ra.get(pos)).addChangeListener(new FormElementChangeListener() {

      @Override
      public void stateChanged(FormElement form) {
        ra.remove(pos);
        ra.add(pos, form.getContentAsString());
      }
    });
  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormNumberSpinner getNumber(final String name, final Object holder, final Object index) {
    return (FormNumberSpinner) new FormNumberSpinner(name, RubyHelper.toInt(holder, index)).addChangeListener(new FormElementChangeListener() {

      @Override
      public void stateChanged(FormElement form) {
        RubyHelper.setNum(holder, index, form.getContentAsString());

      }
    });
  }

  /**
   * Add Support for Toner
   *
   * @param f
   * @param base
   * @param tone
   */
  public static void addTone(FormBuilder f, final String base, IRubyObject tone) {
    // add toner
    f.addElement(base + "blue", getNumber(I18N.t("Blue"), tone, "@blue").setMinMax(-255, 255, 1));
    f.addElement(base + "red", getNumber(I18N.t("Red"), tone, "@red").setMinMax(-255, 255, 1));
    f.addElement(base + "green", getNumber(I18N.t("Green"), tone, "@green").setMinMax(-255, 255, 1));
    f.addElement(base + "gray", getNumber(I18N.t("Gray"), tone, "@gray").setMinMax(0, 255, 1));
  }

  /**
   * Add Support for Color
   *
   * @param f
   * @param base
   * @param color
   */
  public static void addColor(FormBuilder f, final String base, IRubyObject color) {
    // add color
    // f.addElement(base + "blue", getNumber(I18N.t("Blue"), color,
    // "@blue").setMinMax(0, 255, 1));
    // f.addElement(base + "red", getNumber(I18N.t("Red"), color,
    // "@red").setMinMax(0, 255, 1));
    // f.addElement(base + "green", getNumber(I18N.t("Green"), color,
    // "@green").setMinMax(0, 255, 1));
    // f.addElement(base + "alpha", getNumber(I18N.t("Alpha"), color,
    // "@alpha").setMinMax(0, 255, 1));
    f.addElement(base + "c", new FormColor(I18N.t("Color"), color));

  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormCheckbox getBooleanFlag(final String name, final RubyObject holder, final int index, final int flag) {
    final JavaTable table = new JavaTable(holder);

    return (FormCheckbox) new FormCheckbox(name, (table.get(index, 0, 0) & flag) == flag).addChangeListener(new FormElementChangeListener() {

      @Override
      public void stateChanged(FormElement form) {
        if (Boolean.parseBoolean(form.getContentAsString())) {
          table.set(index, 0, 0, table.get(index, 0, 0) | flag);
        } else {
          table.set(index, 0, 0, table.get(index, 0, 0));
        }

      }
    });
  }

  /**
   * Add a boolean
   *
   * @param name
   * @param holder
   * @param index
   * @return
   */
  public static FormCheckbox getBoolean(final String name, final Object holder, final Object index) {
    return (FormCheckbox) new FormCheckbox(name, ((RubyBoolean) RubyHelper.getObj(holder, index)).isTrue())
        .addChangeListener(new FormElementChangeListener() {

          @Override
          public void stateChanged(FormElement form) {
            RubyHelper.setObj(holder, index, new RubyBoolean(RubyHelper.getRunTime(holder, index), Boolean.parseBoolean(form.getContentAsString())));

          }
        });

  }

  /**
   * Build a ForumCheckbox for an int (values: 0/1 )
   *
   * @param name
   * @param object
   * @return
   */
  public static FormCheckbox getBooleanAsInt(final String name, final Object holder, final Object index) {
    return (FormCheckbox) new FormCheckbox(name, RubyHelper.toInt(holder, index) == 1).addChangeListener(new FormElementChangeListener() {

      @Override
      public void stateChanged(FormElement form) {
        RubyHelper.setNum(holder, index, Boolean.parseBoolean(form.getContentAsString()) ? 1 : 0);

      }
    });

  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormElement getError(final String name, IRubyObject irb) {
    String mess = irb.inspect().toString();
    return new FormInfo(name, "@" + irb.getMetaClass() + " " + (mess.length() > 100 ? mess.substring(0, 100) + "..." : mess)).setInfoTxt(
        I18N.t("Unbekannte Klasse"), "error");
  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormElement getError(final String name, final String id, final RubyObject object) {
    return getError(name, object.getInstanceVariable(id));
  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormComboBox getComboBoxNum(final String name, final String[] values, final String[] titles, final Object holder, final Object index) {

    return (FormComboBox) new FormComboBox(name, values, titles).selectField(RubyHelper.toString(holder, index)).addChangeListener(
        new FormElementChangeListener() {

          @Override
          public void stateChanged(FormElement form) {
            // set
            RubyHelper.setNum(holder, index, form.getContentAsString());

          }
        });
  }

  /**
   * Form to select the right event
   *
   * @param name
   * @param map
   * @param holder
   * @param index
   * @return
   */
  public static FormComboBox getEventSelector(String name, RubyObject map, Object holder, Object index) {

    String[] titles;
    String[] values;
    // has a map?
    if (map == null) {
      values = JavaHelper.numAry(-1, 100);
      titles = JavaHelper.numAry(-1, 100);
      titles[0] = "Player";
      titles[1] = "This Event";
    } else {
      // get all events
      RubyHash ra = (RubyHash) map.getInstanceVariable("@events");

      // convert code
      ArrayList<String> ids = new ArrayList<String>();
      ArrayList<Long> ls = new ArrayList<Long>();
      ids.add("Player");
      ls.add(-1l);
      ids.add("This Event");
      ls.add(0l);

      for (Object s : ra.keySet()) {
        ls.add((Long) s);
        ids.add(new SystemGObject((RubyObject) ra.get(s)).getName());
      }

      // convert
      titles = new String[ids.size()];
      values = new String[ids.size()];
      for (int i = 0, l = ids.size(); i < l; i++) {
        titles[i] = ids.get(i);
        values[i] = ls.get(i).toString();
      }
    }

    return getComboBoxNum(name, values, titles, holder, index);
  }

  /**
   * Add an String
   *
   * @param name
   * @param i
   * @return
   */
  public static FormComboBox getComboBox(final String name, final String[] values, final String[] titles, final IRubyObject irb) {

    return (FormComboBox) new FormComboBox(name, values, titles).selectField(irb.toString()).addChangeListener(new FormElementChangeListener() {

      @Override
      public void stateChanged(FormElement form) {
        // set
        RubyHelper.setString(irb, form.getContentAsString());

      }
    });
  }
}
TOP

Related Classes of de.yaams.extensions.rgssproject.database.form.RubyForm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.